package util

//
//import (
//	"encoding/json"
//	"fmt"
//	"go.uber.org/zap"
//	"go.uber.org/zap/zapcore"
//	"gorm.io/driver/mysql"
//	"gorm.io/gorm"
//	glog "gorm.io/gorm/logger"
//	"gorm.io/gorm/schema"
//	"moul.io/zapgorm2"
//	"os"
//	"time"
//)
//
//var table = "g_7410982596282761216"
//var imgUrl = "http://47.57.191.65:9191/"
//
//type A1 struct {
//	ToUid    int64
//	FromUid  int64
//	SendTime time.Time
//	MType    int
//	Body     string
//	Nick     string
//}
//
//func (*A1) TableName() string {
//	return table
//}
//
//type A2 struct {
//	ToUid    int64     `gorm:"column:to_uid;type:bigint(20)"`
//	Nick     string    `gorm:"column:nick;type:varchar(255)"`
//	FromUid  int64     `gorm:"column:from_uid;type:bigint(20)"`
//	SendTime time.Time `gorm:"column:send_time;type:datetime"`
//	MType    int       `gorm:"column:m_type;type:int(10)"`
//	Body     string    `gorm:"column:body;type:text"`
//	MessDesc string    `gorm:"column:mess_desc;type:varchar(255)"`
//}
//
//func (*A2) TableName() string {
//	return table + "_res"
//}
//
//type BodyImg struct {
//	Name string
//}
//
//type BodyText struct {
//	Content string
//}
//
//type messType int
//
////基础聊天类消息
//const (
//	TextMessage     messType = 0  //文本消息
//	ImageMessage    messType = 1  //图片消息
//	VideoMessage    messType = 2  //视频消息
//	GEOMessage      messType = 3  //地理定位
//	VoiceMessage    messType = 4  //音频消息
//	FileMessage     messType = 5  //文件消息
//	CardMessage     messType = 6  //名片消息
//	SharkUrl        messType = 7  //分享链接
//	BackMessage     messType = 8  //撤回消息
//	DelMessage      messType = 9  //删除消息
//	AtMessage       messType = 10 //@用户消息(该消息为特殊消息，前后端一起定义)
//	CustomMessage   messType = 11 //自定义消息(该消息内容传输为JSON,消息接收使用文本类型对象解析即可)
//	StickersMessage messType = 12 //表情消息
//	HaveReadMessage messType = 13 //已读消息
//	RedPageMessage  messType = 14 //红包消息
//	BilateralDel    messType = 15 //双向删除
//	TransferMessage messType = 16 //转账消息
//	GroupShock      messType = 17 //群震消息
//)
//
////获得消息描述
//func getMessDesc(messType messType) string {
//	var messDesc string
//	switch messType {
//	case TextMessage:
//		messDesc = "文本消息"
//	case ImageMessage:
//		messDesc = "图片消息"
//	case VideoMessage:
//		messDesc = "视频消息"
//	case GEOMessage:
//		messDesc = "地理定位"
//	case VoiceMessage:
//		messDesc = "音频消息"
//	case FileMessage:
//		messDesc = "文件消息"
//	case CardMessage:
//		messDesc = "名片消息"
//	case SharkUrl:
//		messDesc = "分享链接"
//	case BackMessage:
//		messDesc = "撤回消息"
//	case DelMessage:
//		messDesc = "删除消息"
//	case AtMessage:
//		messDesc = "@用户消息"
//	case CustomMessage:
//		messDesc = "自定义消息"
//	case HaveReadMessage:
//		messDesc = "已读消息"
//	case RedPageMessage:
//		messDesc = "红包消息"
//	case BilateralDel:
//		messDesc = "双向删除"
//	case TransferMessage:
//		messDesc = "转账消息"
//	case GroupShock:
//		messDesc = "群震消息"
//	case StickersMessage:
//		messDesc = "表情消息"
//	}
//	return messDesc
//}
//
//func main() {
//
//	InitLogger()
//
//	var a1 []*A1
//	db, err := ConnMysql()
//	if err != nil {
//		panic(err)
//	}
//	return
//	err = db.Model(A1{}).Find(&a1).Error
//	if err != nil {
//		Log.Debugf("err:%v", err)
//		return
//	}
//	if !db.Migrator().HasTable(&A2{}) {
//		db.Migrator().CreateTable(&A2{})
//	}
//	for _, v := range a1 {
//
//		var body string
//		if v.MType == 1 {
//			var a2 BodyImg
//			err = json.Unmarshal([]byte(v.Body), &a2)
//			if err != nil {
//				Log.Debugf("err:%v", err)
//				continue
//			}
//			body = imgUrl + a2.Name
//		} else if v.MType == 0 {
//			var a2 BodyText
//			err = json.Unmarshal([]byte(v.Body), &a2)
//			if err != nil {
//				Log.Debugf("err:%v", err)
//				continue
//			}
//			body = a2.Content
//		} else {
//			continue
//			body = v.Body
//		}
//		CreateA2Data(db, A2{
//			ToUid:    v.ToUid,
//			FromUid:  v.FromUid,
//			SendTime: v.SendTime,
//			MType:    v.MType,
//			Body:     body,
//			MessDesc: getMessDesc(messType(v.MType)),
//			Nick:     v.Nick,
//		})
//	}
//}
//
//func CreateA2Data(db *gorm.DB, data A2) {
//	err := db.Model(&A2{}).Create(data).Error
//	if err != nil {
//		Log.Debugf("err:%v", err)
//	}
//}
//
//func ConnMysql() (*gorm.DB, error) {
//	dbHost := "127.0.0.1"
//	dbPort := 3306
//	dbUser := "root"
//	dbPass := "root"
//	dbName := "im"
//	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", dbUser, dbPass, dbHost, dbPort, dbName)
//	logger := zapgorm2.New(InitGormLogger())
//	logger.LogLevel = glog.LogLevel(4)
//	logger.SetAsDefault() // optional: configure gorm to use this zapgorm.Logger for callbacks
//	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
//		Logger: logger,
//		NamingStrategy: schema.NamingStrategy{
//			TablePrefix:   "db_", // 表前缀
//			SingularTable: true,  // 单数表名称
//			NoLowerCase:   false, // snake_case 转换
//		},
//	})
//	if err != nil {
//		return nil, fmt.Errorf("connect database error: %s", err.Error())
//	}
//	return db, nil
//}
//
//func InitGormLogger() *zap.Logger {
//	encoder := GetEncoder()
//	cores := make([]zapcore.Core, 0)
//	debug := 1
//	if debug == 1 {
//		cores = append(cores, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zap.DebugLevel))
//	}
//	core := zapcore.NewTee(cores...)
//	return zap.New(core, zap.AddCaller())
//}
//
//func GetEncoder() zapcore.Encoder {
//	zapType := "test"
//	var encoderConfig zapcore.EncoderConfig
//	switch zapType {
//	case "prod":
//		encoderConfig = zap.NewProductionEncoderConfig()
//	case "debug":
//		encoderConfig = zap.NewDevelopmentEncoderConfig()
//	}
//
//	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder // 按级别显示不同颜色，不需要的话取值zapcore.CapitalLevelEncoder就可以了
//	encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder // 显示完整文件路径
//	return zapcore.NewConsoleEncoder(encoderConfig)
//}
//
//var Log *zap.SugaredLogger
//var ZapLogger *zap.Logger
//
//func InitLogger() {
//	if ZapLogger == nil {
//		encoder := GetEncoder()
//		cores := make([]zapcore.Core, 0)
//
//		// 调试级别
//		debugPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
//			return lev == zap.DebugLevel
//		})
//		// 日志级别
//		infoPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
//			return lev == zap.InfoLevel
//		})
//		// 警告级别
//		warnPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
//			return lev == zap.WarnLevel
//		})
//		// 错误级别
//		errorPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
//			return lev >= zap.ErrorLevel
//		})
//		debug := 1
//		if debug == 1 {
//			cores = append(cores, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), debugPriority))
//			cores = append(cores, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), infoPriority))
//			cores = append(cores, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), warnPriority))
//			cores = append(cores, zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), errorPriority))
//		}
//		core := zapcore.NewTee(cores...)
//		ZapLogger = zap.New(core, zap.AddCaller())
//		Log = ZapLogger.Sugar()
//	}
//}
//
///*导出某个群的聊天记录
//create table g_7373264159129550848
//select from_uid,nick,to_uid,m_type,body,FROM_UNIXTIME(left(send_time,10)) as send_time from im_message_group where to_uid = 7410982596282761216
//*/
